package com.hzit.dao.proxy.dyna;

import com.hzit.dao.UserDao;
import com.hzit.dao.impl.UserDaoImpl;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import org.springframework.web.method.HandlerMethod;

import java.lang.reflect.Method;

/**
 * 类名：
 * 作者：WF
 * 功能：CGLIB 实现的动态代理,通过继承父类创建代理对象
 */
public class UserDaoCGLIBDaynaImpl implements MethodInterceptor {

	//2. 生成代理对象
	public UserDaoImpl createProxy(){
		//2.1 定义一个Enhandler对象
		Enhancer enhancer = new Enhancer();
		//2.2 指定实现了Callback接口的对象
		enhancer.setCallback(this);
		enhancer.setSuperclass(UserDaoImpl.class);
		//2.3 创建代理对象并返回
		return (UserDaoImpl) enhancer.create();
	}
	//3. 调用目标对象的方法
	@Override
	public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
		//3.1 如果是query方法就进行安全性检查
		if(method.getName().equals("query")){
			checkSecurity();
		}
		//3.2 调用目标对象的方法
		return methodProxy.invokeSuper(o,args);      // 参数1：代表目标对象 参数2：为方法传递的参数
	}
	private void checkSecurity(){
		System.out.println("CGLIB正在进行安全性检查。。。");
	}
}
